#include "apue.h"
#include <fcntl.h>

char	buf1[] = "abcdefghij";
char	buf2[] = "ABCDEFGHIJ";

int
main(void)
{
	int		fd;
	int     fd2;
	int     count = 0;

	if ((fd = creat("file.hole", FILE_MODE)) < 0)
		err_sys("creat error");

	if (write(fd, buf1, 10) != 10)
		err_sys("buf1 write error");
	/* offset now = 10 */

	if (lseek(fd, 16384, SEEK_SET) == -1)
		err_sys("lseek error");
	/* offset now = 16384 */

	if (write(fd, buf2, 10) != 10)
		err_sys("buf2 write error");
	/* offset now = 16394 */
	// 此时文件中的内容是    abcdefghij...16384...ABCDEFGHIJ


	if((fd2 = creat("file.nohole",FILE_MODE)) <0)
		err_sys("creat error");

	while(count < 16390)
	{
		if(write(fd2,buf2,10) != 10)
			err_sys("buf2 write error");
		count += 10;
	}

	exit(0);
}

/*
中间虽然占据了16384 但不是实际占用的物理空间
od -c ./file.hole     // -c是字符显示，-x是16进制显示
od -c ./file.nohole

ls -sl ./file*        //查看尺寸和块数
会看到虽然大小一样，但是所占的磁盘块数不一样
*/
